<?
if (!isset ($_GET['itemId']))
	throw new Exception ('Houve perda de vari�veis!');

$itemId = $_GET['itemId'];
require_once Instance::singleton ()->getCorePath () .'extra/fpdf.php';
define('FPDF_FONTPATH','local/component/cpcx.Oficio/_script/font/');
$db = Database::singleton ();
$db->beginTransaction ();

class PDF_Oficio extends Pdf
{
      
	//Page footer
	function Footer()
	{
			//Position at 1.5 cm from bottom
			$this->SetY(-25);
			//Arial italic 8
			$this->SetFont('Times','B',8);
			//Page number
			$this->Cell(180,3,utf8_decode('Câmpus de Coxim - CPCX/UFMS') ,0,1,'C');
                        $this->Cell(180,3,utf8_decode('Av. Márcio Lima Nantes, S/No. - Vila da Barra - Estrada do Pantanal') ,0,1,'C');
                        $this->Cell(180,3,utf8_decode('Fone/Fax: +55(67)32910200/0202/0203 - CEP 79400-000 - Coxim/MS - Brasil') ,0,1,'C');
                        $this->SetFont('Times','B','S',8);
                        $this->Cell(180,3,utf8_decode('http://www.cpcx.ufms.br') ,0,1,'C');

	}
}

$pdf = new PDF_Oficio ();
$pdf->AliasNbPages();

$sql = "select
 oficio.oficioid
,oficio.protocolo
,origem.chefe_funcao as chefe_funcao
,upper(origem.setor_chefe) as chefe_nome
,oficio.descr
,EXTRACT(DAY FROM oficio.data) as dia
,EXTRACT(MONTH FROM oficio.data) as mes
,EXTRACT(YEAR FROM oficio.data) as ano
,ano.descricao as ano
from cpcx.oficio oficio
join cpcx.ano ano on ano.anoid=oficio.anoid
join cpcx.setor origem on origem.setorid= oficio.setorid WHERE oficio.oficioid=".$itemId;

		
$reg = $db -> prepare($sql);

$reg -> execute();

$cont=0;
$cor=-1;



while($obj = $reg -> fetch(PDO::FETCH_OBJ))
{
	
		$pdf->AddPage();
		$coordXbase = 10;
		$coordY = 10;
		$pdf->SetXY($coordXbase,$coordY);
		$xx = $pdf->GetX();
		$yy = $pdf->GetY();
		$pdf->SetFont('Arial', 'B', 12);
		$pdf->Image($section->getCompPath()."_script/republica_brasao.jpg", 20, 7 ,23);
		$pdf->SetFont('Arial', '', 10);
		$pdf->Cell(190, 5,  utf8_decode('Serviço Público Federal'), 0, 1, 'C');
                $pdf->SetFont('Arial', '', 10);
		$pdf->Cell(190, 5,  utf8_decode('Ministério da Educação'), 0, 1, 'C');


                $pdf->SetFont('Arial', 'B', 12);


		$pdf->Cell(190,5, utf8_decode('Fundação Universidade Federal de Mato Grosso do Sul'),0,1,'C');
		$pdf->SetFont('Arial', '', 10);
                $pdf->Image($section->getCompPath()."_script/ufms_logo.jpg", 170, 7 ,23);

                
                $pdf->SetFont('Times', '', 12);
                $pdf->SetX("20");
		$pdf->Cell(190,25, utf8_decode('OFÍCIO '.$obj->protocolo.'/'.$obj->ano.' - CPCX'), 0, 1, 'L');
		$pdf->Cell(190, 0,  utf8_decode('Coxim, '.$obj->dia.' de '.getMes($obj->mes).' de '.$obj->ano.'.'), 0, 1, 'R');

               

                $pdf->SetX("20");
                $a = new html2pdf;
                $field = preprocessa($obj->descr);
	       $a->convert($field);
               $pdf->Cell(190,100, utf8_decode($a->pdf()), 0, 1, 'L');


                $pdf->Cell(190,10, utf8_decode($obj->chefe_nome), 0, 1, 'R');
}

$db -> commit();


$pdf->Output();

exit ();

function getMes($mes){

    $descrMes;
    switch ($mes){

        case 1: $descrMes='janeiro';
            break;
        case 2: $descrMes='fevereiro';
            break;
        case 3: $descrMes='março';
            break;
        case 4: $descrMes='abril';
            break;
        case 5: $descrMes='maio';
            break;
        case 6: $descrMes='junho';
            break;
        case 7: $descrMes='julho';
            break;
        case 8: $descrMes='agosto';
            break;
        case 9: $descrMes='setembro';
            break;
        case 10: $descrMes='outubro';
            break;
        case 11: $descrMes='novembro';
            break;
        case 12: $descrMes='dezembro';
            break;
    }
    
    return $descrMes;
}

class html2pdf
{
	//guarda o texto que será transformado
	var $html;
	//guarda a string de saída da classe
	var $out;
	//guarda indice do caracter q esta sendo lido no momento
	var $posCorrente;
	//indica a formatação do texto(negrito, itálico e/ou sublinhado)
	var $format;
	//indica que o texto foi deslocado para a direita
	var $tab;
	//indica a utilização de marcadores no texto
	var $mark;
	//indica o alinhamento do texto
	var $Align;
	//Guarda o tamanho da linha atual
	var $tamLinha;
	//Indica se a linha atual é nova
	var $newLine;
	//Indica a linha atual
	var $Line;
	//Guarda o vetor com o numero de caracteres de cada linha
	var $nChars;

	function convert($text) //Recebe o texto q deve ser convertido e inicia as variaveis
	{
		global $numLinhas;

		$this->nChars = $numLinhas;
		$this->html = $text;
		$this->posCorrente = 0;
		$this->out = "";
		$this->token = '';
		$this->format = '000';
		$this->tab = 0;
		$this->mark = '';
		$this->Align = 0;
		$this->tamLinha = 0;
		$this->newLine = false;
		$this->Line = 0;
		$this->first = true;
	}
	function unhtmlentities ($string) //Converte html entities p/ texto normal. ex: '&lt;' vira '<'
	{
   		$trans_tbl = get_html_translation_table (HTML_ENTITIES);
   		$trans_tbl = array_flip ($trans_tbl);
	   return strtr($string, $trans_tbl);
	}
	function pdf()
	{
		if($this->posCorrente >= strlen($this->html))
				return "";
		{
			//Caso o alinhamento seja diferente de esquerda(0) e seja uma nova linha pega o tamanho dela
			if($this->Align != 0 && $this->newLine && $this->Line < count($this->nChars))
				$this->newLine = false;

			while($this->posCorrente <= strlen($this->html)) //Enqto nao chegar ao final do texto:
			{
				$charac = substr($this->html,$this->posCorrente,1); //pega o caracter da posicao corrente

				if($charac != '<') //Caso nao seja tag:
				{
					if($charac == '&')//Trata html entities
					{

						$cod = "";

						while($charac != ';')
						{
							$charac = substr($this->html,$this->posCorrente++,1);
							$cod .= $charac;
						}
						$this->out .= $this->unhtmlentities($cod);
					}
					else
					{
						//transforma vários espaços em branco consecutivos em um só
						if($charac == " ")
						{
							while($charac == " ")//ignora excesso de caracteres em branco
							{
								$this->posCorrente++;
								$charac = substr($this->html,$this->posCorrente,1);

							}
							$this->posCorrente--;
							$charac = " ";
						}
						$this->out .= $charac;	//Forma a string de saida
						$this->posCorrente++;
					}
				}
				else //Caso seja tag:
				{
					if($this->out != "") //Se ($saida != VAZIO) retorne $saida
					{
						$this->newLine = false; 		//Nao foi iniciada nova linha
						$aux = $this->mark.$this->out;	//no caso de listas poem um marcador na linha
						$this->out = "";
						$this->mark = '';
						return $aux;
					}
					$tag = "";
					$this->posCorrente++;

					if(substr($this->html,$this->posCorrente,1) == '!')
					{
						while(substr($this->html,$this->posCorrente,1) != '>' && $this->posCorrente <= strlen($this->html))
						{
							$tag .= substr($this->html,$this->posCorrente,1);
							$this->posCorrente++;
						}
					}
					else
					{
						//enqto nao encontrar o fim da tag ou do arkivo faça:
						while(substr($this->html,$this->posCorrente,1) != '>' && $this->posCorrente <= strlen($this->html))
						{
							$tag .= substr($this->html,$this->posCorrente,1);
							$this->posCorrente++;
						}
					}
					$this->posCorrente++;

					switch(strtok($tag," "))//trata as tags
					{
						case "strong":
							$this->format = substr_replace($this->format,"1",2,1); //$format = xx1
							break;
						case "/strong":
							$this->format = substr_replace($this->format,"0",2,1); //$format = xx0
							break;
						case "b":
							$this->format = substr_replace($this->format,"1",2,1); //$format = xx1
							break;
						case "/b":
							$this->format = substr_replace($this->format,"0",2,1); //$format = xx0
							break;
						case "en":
							$this->format = substr_replace($this->format,"1",1,1); //$format = x1x
							break;
						case "/en":
							$this->format = substr_replace($this->format,"0",1,1); //$format = x0x
							break;
						case "em":
							$this->format = substr_replace($this->format,"1",1,1); //$format = x1x
							break;
						case "/em":
							$this->format = substr_replace($this->format,"0",1,1); //$format = x0x
							break;
						case "u":
							$this->format = substr_replace($this->format,"1",0,1); //$format = 1xx
							break;
						case "/u":
							$this->format = substr_replace($this->format,"0",0,1); //$format = 0xx
							break;

						case "p":
								switch(strstr($tag,"\""))
									{
										case "\"center\"":
											$this->Align = 3;
											break;
										case "\"justify\"":
											$this->Align = 2;
											break;
										case "\"right\"":
											$this->Align = 1;
											break;
										default:
											$this->Align = 0;
											break;
									}
							break;
						case "/p":
							$this->Align = 0;
							break;

						case "hr":
							$this->newLine = true;
							return "_________________________________________________________________________________________________________________________________________________________";
							break;


						case "div":
							$this->newLine = true;
							$action = strtok(" ");

							// transforma <div style="text-align:(...)"> em <div align=(...)>
							if ($action == "style=\"text-align:")
								$action = "align=";

							if( substr($action,0,5) == "align")
							{
								//transforma $opcao de "text-align: (...);" para "(...)"
								$opcao = strstr($tag,"\"");
								$opcao = str_replace(";","",$opcao);

								//echo $opcao;
								switch($opcao)
								{
									case "\"center\"":
										$this->Align = 3;
										//$this->tamLinha = $this->getSizeText($this->posCorrente);
										if($this->Line < count($this->nChars))
											$this->tamLinha = $this->nChars[$this->Line];
										else
											$this->tamLinha = 0;
										break;
									case "\"justify\"":
										$this->Align = 2;
										break;
									case "\"right\"":
										$this->Align = 1;
										break;
									default:
										$this->Align = 0;
										break;
								}
							}
							else
							{
								if(substr($action,0,5) == "style")
									$this->tab++;
							}
							if(!$this->first)
							{
								$anterior = isset($this->nChars[$this->Line])?$this->nChars[$this->Line]:-1;
								$linha = isset($this->nChars[$this->Line+1])?$this->nChars[$this->Line+1]:-1;
								$proxima = isset($this->nChars[$this->Line+2])?$this->nChars[$this->Line+2]:-1;

								if( $anterior > 0 && $proxima > 0 && $linha > 0)
								{
									$this->Line++;
									return "\n";
								}
								$this->Line++;
							}
							else
								$this->first = false;
							break;
						case "/div":
//								if($this->tab > 0)
//									$this->tab--;
								$this->Align = 0;
								$this->newLine = true;

							$anterior = isset($this->nChars[$this->Line])?$this->nChars[$this->Line]:-1;
							$linha = isset($this->nChars[$this->Line+1])?$this->nChars[$this->Line+1]:-1;
							$proxima = isset($this->nChars[$this->Line+2])?$this->nChars[$this->Line+2]:1;

							if( $anterior > 0 && $proxima > 0 && $linha > 0)
							{
								$this->Line++;
								return "\n";
							}
							$this->Line++;
							break;

						case"blockquote":
							$this->tab++;
							break;
						case "/blockquote":
							$this->tab--;
							break;
						case"ul":
							$this->tab++;
							break;
						case "/ul":
							$this->tab--;
							break;
						case"ol":
							$this->tab++;
							break;
						case "/ol":
							$this->tab--;
							break;

						case "li":
							$this->mark = '» ';

							$anterior = isset($this->nChars[$this->Line])?$this->nChars[$this->Line]:-1;
							$linha = isset($this->nChars[$this->Line+1])?$this->nChars[$this->Line+1]:-1;
							$proxima = isset($this->nChars[$this->Line+2])?$this->nChars[$this->Line+2]:-1;

							if( $anterior > 0 && $proxima > 0 && $linha > 0)
							{
								$this->Line++;
								return "\n";
							}
							$this->Line++;
							break;
						case "/li":
							$this->mark = '» ';
							$this->Line++;
							return "\n";
							break;
						case "br":
							if($this->Line < count($this->nChars))
								$this->tamLinha = $this->nChars[$this->Line];
							$this->newLine = true;
							$this->Line++;
							return "\n";
							break;
						case "br /":
							if($this->Line < count($this->nChars))
								$this->tamLinha = $this->nChars[$this->Line];
							$this->newLine = true;
							$this->Line++;
							return "\n";
							break;

						default:
							break;
						}
					}
			}
		return $this->out;
		}
	}
}

function preprocessa($txt)
{
global $numLinhas;// = new array();

$kebra = false;
$first = true;
$TAMLINHA = 133;
$texto  = '';
$cont = 0;
$space = 0;
$countbr = 0;
$contLinha = 0;
$charac = 0;
$ul = false;

$txt = preg_replace("/((\r\n)+)/","", $txt);
$txt = str_replace(">    <","><",$txt);
	for($i = 0; $i < strlen($txt); $i++)
	{

		$char = substr($txt,$i,1);

		if($char != '<')
		{
			if($char == '&')
			{
				$special = '';
				do
				{
					$special .= $char;
					$i++;
					$char = substr($txt,$i,1);
				}while($char != ';' && $i < strlen($txt));

				if($i < strlen($txt))
				{
					$special .= $char;
					//$special = unhtmlentities ($special);
				}
				$texto .= $special;
				$cont++;
			}
			else
			{
				if($cont < $TAMLINHA)
				{
					if($char == ' ')
					{
						$space = $i + $countbr;
						$auxcont = $cont;
					}
					$texto .= $char;
					$cont++;
				}
				else
				{
					$diferenca = 0;

					if($space != 0)
					{
						$diferenca = $cont - $auxcont;
						$texto = substr_replace($texto,"<br>",$space,0);
						$texto .= $char;
						$countbr += 4;
						$cont = $auxcont;
					}
					else
						$texto .= "<br>";


					$numLinhas[$contLinha] = $cont;
					$contLinha++;

					$cont = $diferenca;
				}
			}
		}
		else
		{
			$tag = '';
			while(substr($txt,$i,1) != '>' && $i <= strlen($txt))
			{
				$tag .= substr($txt,$i,1);
				$texto .= substr($txt,$i,1);
				$i++;
			}
			$tag .= substr($txt,$i,1);
			$texto .=  substr($txt,$i,1);

			if(substr($tag,0,4) == "<div")
			{
				if(($first && $cont  != 0) || !$first)
				{
					$numLinhas[$contLinha] = $cont;
					$contLinha++;
					$cont = 0;
				}
				$first = false;
			}
			else
			{
				switch($tag)
				{
					case "</div>":
					case "<br>":
					case "<br />":
					case "<li>":
					case "</li>":
						$first = false;
						$numLinhas[$contLinha] = $cont;
						$contLinha++;
						$cont = 0;
						break;
					case "<ul>":
						$ul = true;
						break;
					case "</ul>":
						$ul = false;
				}
			}
		}
	}
	if($cont != 0 )
		$numLinhas[$contLinha] = $cont;
	return $texto;
}
?>